package br.com.affero.testewel.model.user;

public class UserService {

	private static final long CURR_USER_TESTE = 1;
	
	private final UserDAO dao;
	
	/**
	 * Instância única do Serviço de Usuários
	 */
	private static UserService instance;
	
	public static UserService getInstance(){
		// Vamos construir caso não exista o/
		if(instance == null)
			instance = new UserService();
		
		return instance;
	}
	
	/**
	 * Construtor privado.
	 * OBS: Adicionei a obtenção de DAOs, Validators, Util aqui para evitar 
	 * construção dos objetos estaticamente, pelo ClassLoader.
	 * Assim, se uma instancia do serviço não for obtida nenhuma das dependências será construída.
	 * 
	 *  @todo Implementar uma forma abstrata de realizar a instanciação dos compenentes necessário. Via configuração XML, Factories ou DI, por exemplo.
	 */
	private UserService(){
		dao = new UserHibernateDAO();
	}
	
	
	/**
	 * Método que obtem o usuário atual do sistema.
	 * Utilizei aqui uma constante, em uma implementação completa o usuário seria obtido 
	 * através da sessão, ou de algum serviço específico de autorização ue controlaria o acesso
	 * a partes específicas do sistema...
	 */
	public User getCurrUser(){
		return dao.findOneById(CURR_USER_TESTE);
	}
	 		
			
	
}
